#ifndef __USART_H
#define __USART_H

#include "n32g430.h"
#include "n32g430_rcc.h"

// 接收缓冲区大小
#define USART_RX_BUFFER_SIZE  2048

// 接收状态机状态
typedef enum {
    RECV_SYNC1,      // 等待同步字节1
    RECV_SYNC2,      // 等待同步字节2
    RECV_LENGTH,     // 接收长度
    RECV_DATA,       // 接收数据
    RECV_CHECKSUM    // 接收校验和
} USART_RX_State;

// 接收结构体
typedef struct {
    uint8_t  rx_buffer[USART_RX_BUFFER_SIZE];  // 接收缓冲区
    uint16_t rx_count;       // 当前接收计数
    uint16_t rx_length;      // 期望接收的数据长度
    uint8_t  rx_complete;    // 接收完成标志
    USART_RX_State rx_state; // 接收状态
    uint16_t packet_length;  // 当前数据包长度
    uint16_t data_length;    // 数据部分长度
} USART_RX_TypeDef;

// 函数声明
void USARTy_Init(uint32_t baudrate);
void USART_SendByte(uint8_t data);
void USART_SendBuffer(uint8_t *buffer, uint16_t size);
uint16_t USART_ReceiveBuffer(uint8_t *buffer, uint16_t size);
void USART_CheckUpgrade(void);
void delay(uint32_t ms);

extern USART_RX_TypeDef USART1_RX_Struct;

#endif /* __USART_H */ 